package org.framework.common.api.service.repository;

import java.io.Serializable;

import org.framework.common.api.support.model.PageModel;
import org.framework.common.api.support.model.QueryModel;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.NoRepositoryBean;

/**
 * Spring Data JPA 自定义全局Dao
 * <p>描述: 接口</p>
 * <p>Company: Professional</p>
 * @author chanlong(陈龙)
 * @date 2016年1月23日 上午10:34:44
 * @version 1.0.2016
 */
@NoRepositoryBean
public interface CommonRepositoryAware<T, ID extends Serializable> extends JpaRepository<T, ID>, JpaSpecificationExecutor<T> {

	/**
	 * 分页查询接口.
	 * @param query 查询辅助类（分页、排序、条件）
	 * @return
	 * @throws Exception
	 * @author chanlong(陈龙)
	 * @date 2016年1月20日 上午9:19:21
	 */
	public PageModel<T> findByQuery(QueryModel query) throws Exception;
	

	/**
	 * 分页查询接口.
	 * @param hql
	 * @param offset
	 * @param limit
	 * @return
	 * @throws Exception
	 * @author chanlong(陈龙)
	 * @date 2016年1月26日 下午10:35:01
	 */
	public PageModel<T> findByQuery(final String hql, final int offset, final int limit) throws Exception;

}
